#include<stdio.h>
#include<malloc.h>

typedef struct 
{
    int data;
    struct LNode *next;
}LNode,*Linklist;

int main()
{
    int n1,n2,temp;
    scanf("%d",&n1);
    Linklist p1,p2,p,q;   //p1 p2是两个链表的头指针，q是工具性尾指针，p是新生成的节点
    p1=(Linklist)malloc(sizeof(LNode));
    p2=(Linklist)malloc(sizeof(LNode));
    p1->next=NULL,p2->next=NULL; 
    //模块1：输入处理数据
    q=p1;
    for(int i=0;i<n1;i++)
    {
        scanf("%d",&temp);
        p=(Linklist)malloc(sizeof(LNode));
        p->next=NULL;
        p->data=temp;
        q->next=p;
        q=p;
    }
    scanf("%d",&n2);
    q=p2;
    for(int i=0;i<n2;i++)
    {
        scanf("%d",&temp);
        p=(Linklist)malloc(sizeof(LNode));
        p->next=NULL;
        p->data=temp;
        q->next=p;
        q=p;
    }
    //模块2：找出相同数据
    Linklist p3,s1,s2,t;
    int flag=0;
    p3=(Linklist)malloc(sizeof(LNode));
    p3->next=NULL;
    s1=p1->next,s2=p2->next;
    q=p3;
    for(;s1!=NULL;s1=s1->next)
    {
        for(s2=p2->next;s2!=NULL;s2=s2->next)
        {
            flag=0;
            if(s1->data==s2->data)
            {
                t=p3;
                while(t)
                {
                    if(t->data==s2->data)
                    {
                        flag=1;
                        break;
                    }
                    t=t->next;
                }
                if(flag==0)
                {
                    p=(Linklist)malloc(sizeof(LNode));
                    p->next=NULL;
                    p->data=s2->data;
                    q->next=p;
                    q=p;
                }
                
            }
        }
    }
    q=p3->next;
    int count=0;
    while(q)
    {
        count++;
        q=q->next;
    }
    q=p3->next;
    if(q==NULL)
    {
        printf("0\n");
        printf("没有公共元素");
    }
    else
    {
        printf("%d\n",count);
        while(q)
        {
            printf("%d",q->data);
            q=q->next;
            if(q!=NULL)  printf(" ");
        }
    }
}